package com.sz.biz.logistics.ord.service;

import com.sz.biz.logistics.ord.entity.OrdWaybillPrearrange;
import com.sz.biz.logistics.ord.enums.OrdServiceTypeEnum;

import javax.annotation.Nullable;
import javax.annotation.Resource;
import java.util.List;

/**
 * Package: com.sz.biz.logistics.ord.service<br>
 * Description: TODO: ADD FUNCTION<br>
 * @author WuHan<br>
 * @date 2017-10-12 18:32<br>
 * @since ${TAG}
 */
@Resource
public interface OrdWaybillNoPrearrangeService {
    
    /**
     * 批量分配号段。
     * @param ordServiceTypeEnum 业务类型
     * @param amount 号码数
     * @param startIndex 起始号码
     * @return 影响行数
     * */
    int batchAllocate(OrdServiceTypeEnum ordServiceTypeEnum, int amount, String startIndex, String refId);
    
    /**
     * 获取各类运单当前最近的预分配号段起始值。
     * @param currentSerialNumbers 包含三类业务类型最大单号的集合。
     * @return 三类业务各自最近的预分配号段起始值。
     * */
    List<String> fetchNearestMargins(List<String> currentSerialNumbers);
    
    /**
     * 获取各类运单当前最近可用号段起始值。
     * @param currentSerialNumbers 包含三类业务类型最大单号的集合。
     * @return 三类业务各自最近的可用号段起始值。
     * */
    List<String> fetchAvailableNumbers(List<String> currentSerialNumbers);
    
    /**
     * 获取指定业务类型的预分配号码段
     * @param serviceType 业务类型
     * @param userId 用户ID，可为空
     * @return 所有符合要求的预分配号段。若传入用户ID，还会返回各号段的占用情况。
     * */
    List<OrdWaybillPrearrange> fetchBlockList(String serviceType, @Nullable String userId);
}
